package org.fujay.langchain4jserver.domain.conversation.service;

import org.fujay.commons.langchain4j.param.Message;
import org.fujay.langchain4jserver.domain.application.entity.App;
import org.fujay.langchain4jserver.domain.conversation.aggregate.ConversationAggregate;
import org.fujay.langchain4jserver.domain.conversation.entity.MessageEntity;
import org.fujay.langchain4jserver.domain.model.aggregate.Model;
import reactor.core.publisher.Flux;

import java.util.function.Consumer;

/**
 * 对话处理器领域服务接口 (由基础设施层实现，适配具体的 LLM 交互逻辑)
 */
public interface ConversationProcessor {

    /**
     * 处理用户消息，调用 LLM 生成响应
     *
     * @param userMessage  用户最新消息
     * @param conversation 当前会话聚合（包含历史消息）
     * @param app          当前应用实体 (获取模型和知识库配置)
     * @param model        要使用的模型实体
     * @param doOnComplete
     * @return AI 响应消息 (包含内容和 token 消耗等)
     */
    Flux<Message> generateResponse(
            MessageEntity userMessage,
            ConversationAggregate conversation,
            App app,
            Model model,
            Consumer<Message> doOnComplete);
}
